package reflectdemo1;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 74646
 * Date: 2022-03-30
 * Time: 11:15
 */
class Student{
    //私有属性
    private String name = "CSDN";
    //公共属性
    public int age = 18;

    public Student(){
        System.out.println("公共的不带参数的构造方法");
    }

    private Student(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("私有的带参数的构造方法");
    }

    public void eat(){
        System.out.println("公共的不带参数的普通方法");
    }
    private void sleep(){
        System.out.println("私有的不带参数的普通方法");
    }

    private void func(String str){
        System.out.println(str);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class TestDemo {
    public static void main(String[] args) {
        /*
            *第一种方式（此方式用的最多）：
            *通过 Class 对象的 forName() 静态方法来获取，
            *但可能抛出 ClassNotFoundException 异常
         */
        Class<?> c1 = null;
        try {
            /*
                *forName("类的全路径名")，
                *在 reflectdemo1 这个包中创建了 Student 类。
                * 所以类的全路径为："reflectdemo1.Student"
             */
            c1 = Class.forName("reflectdemo1.Student");
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }

        /*
            *第二种方式：
            *直接通过 类名.class 的方式得到Class对象,
            * 该方法最为安全可靠，程序性能更高
            *说明任何一个类都有一个隐含的静态成员变量 class
        */
        Class<?> c2 = Student.class;

        /*
            *第三种方式：
            *通过getClass获取Class对象
         */
        Student student = new Student();
        Class<?> c3 = student.getClass();

        //c1,c2,c3进行 equals 比较
        System.out.println(c1.equals(c2));
        System.out.println(c2.equals(c3));
        System.out.println(c1.equals(c3));
    }
}
